const router = require('koa-router')()
const userServices = require('../controls/user')
const jwt = require('jsonwebtoken');
const secret = require('../utils/secret')
const  Auth  = require('../middleware/auth')

// 用户登录的接口
router.post('/user/login',async (ctx, next) => {
  // 拿到前端给我的参数 
  let _username = ctx.request.body.username
  let _userpwd = ctx.request.body.userpwd
  if (!_username || !_userpwd) {
    // 没有数据
    ctx.body = {
      code: 400,
      message: "参数不合法!",
      data: null
    }
  }
  // console.log('前端拿到的数据： ',_username, _userpwd );
  // 去数据库里进行匹配
  await userServices.userLogin(_username, _userpwd).then(res => {
    // console.log('登录数据库返回的数据', res);
    if (res.length) {
      // 解密后的密码
      let decryptPassword = secret.Decrypt(res[0].userpwd)
      if(decryptPassword == _userpwd) {
        // 密码正确
        /**
       *  sign接收三个参数，第一个是载荷，用于编码后存储在 token 中的数据，也是验证 token 后可以拿到的数据；
       * 第二个是密钥，自己定义的，验证的时候也是要相同的密钥才能解码；
       * 第三个是options，可以设置 token 的过期时间。
       */
      const token = jwt.sign({
        username: res[0].username,
        _id: res[0].user_id
      }, 'my_token', { expiresIn: 60 * 60 * 24  })

      ctx.body = {
        code:200,
        message:"登录成功！",
        data:res[0],
        token:token
      }
      }else{
        // 密码错误
      ctx.body = {
        code:204,
        message:"密码错误，请重新输入",
        data:null
      }
      }
      
    }else{
      // 没有账号
      ctx.body = {
        code:204,
        message:"账号不存在",
        data:null
      }
    }
    
  })



})

// 用户注册的接口
router.post('/user/register',async (ctx,next)=>{
  // 拿到前端给我的参数 
  let _username = ctx.request.body.username
  let _userpwd = ctx.request.body.userpwd
  if (!_username || !_userpwd) {
    // 没有数据
    ctx.body = {
      code: 400,
      message: "参数不合法!",
      data: null
    }
  }
  console.log('注册参数',_username,_userpwd )
   // 先判断这个用户是否存在
  let res = await userServices.userLogin(_username, _userpwd)
  console.log('判断用户',res)
  if(res.length) {
    // 这个用户已经存在
    ctx.body = {
      code: 204,
      message: "该用户已存在，请更换账号！",
      data: null
    }
  }else{
    // 把密码加密再储存起来
    let userpassword = secret.Encrypt(_userpwd)
    console.log('加密字符串',userpassword)
    await userServices.userRegister(_username, userpassword).then((res)=>{
      // console.log('注册成功返回',res)
      ctx.body = {
        code:200,
        message:"注册成功",
        data:null
      }
    })
  }
  // console.log('注册',res)
})

// 获取用户信息的接口
router.post('/user/getUserInfo',Auth, async (ctx,next)=>{
  // let userId = ctx.request.body.userID
  const { _id } = ctx.state.info;
  if(_id) {
    // 没拿到用户id
    ctx.body = {
      code:416,
      message:"请重新登录",
      data:null
    }
  }

  await userServices.getUserInfo(_id).then((res)=>{
    if(res) {
      ctx.body  = {
        code:200,
        data:res[0],
        message:"查询成功"
      }
    }else{
      ctx.body = {
        code:416,
        message:"请重新登录",
        data:null
      }
    }
  })
  
})
module.exports = router
